package com.ruoyi.mapper;

import com.ruoyi.domain.UserDeviceData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @className UserDeviceDataMapper
 * @author lifei
 */
@Mapper
public interface UserDeviceDataMapper {

    /**
     * 获取用户所有最新健康数据
     *
     * @param userId 用户ID
     * @return 用户所有最新健康数据
     */
    List<UserDeviceData> selectUserLatestData(@Param("userId") long userId);

    /**
     * 根据用户 ID 和日期范围查询用户的健康数据
     *
     * @param userId 用户的唯一标识符
     * @param startDate 查询数据的开始日期
     * @param endDate 查询数据的结束日期
     * @return 用户设备数据列表
     */
    List<UserDeviceData> selectUserDataByDate(@Param("userId") Long userId,
                                              @Param("startDate") Date startDate,
                                              @Param("endDate") Date endDate);

    /**
     * 根据用户 ID 查询用户的基本信息和最新健康数据
     *
     * @param userId 用户的唯一标识符，查询指定用户的健康数据。
     * @return 返回指定用户的基本信息和最新的健康数据。
     *         包括用户的性别、年龄、身高等信息，以及该用户的最新健康数据。
     *         如果用户没有健康数据，将返回 null。
     */
    List<UserDeviceData> selectUserInfoByUserId(@Param("userId") long userId);

    /**
     * 获取前七天睡眠时间
     *
     * @param userId 用户ID
     * @return 睡眠时间数据列表
     */
    List<UserDeviceData> getWeekUserLastestSleepTimeData(@Param("userId") long userId);

    /**
     * 获取用户最近五次血氧数据
     *
     * @param userId 用户ID
     * @return 血氧数据列表
     */
    List<UserDeviceData> selectUserFiveBloodOxygenData(@Param("userId") long userId);

    // 根据用户ID和目标时间获取步数
    Integer getTotalStepsByUserIdAndDate(@Param("userId") Long userId, @Param("goalDate") Date goalDate);

    // 根据用户ID和目标时间获取运动时间
    Integer getTotalActiveMinutesByUserIdAndDate(@Param("userId") Long userId, @Param("goalDate") Date goalDate);
    Integer getActiveMinutes(@Param("userId") Long userId);

}
